/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.hogent.iii.project.dummy;

import be.hogent.iii.project.objects.Coordinaat;
import be.hogent.iii.project.objects.gebouwen.Gebouw;
import be.hogent.iii.project.objects.ventjes.Ventje;
import be.hogent.iii.project.objects.Veld;
import be.hogent.iii.project.objects.gebouwen.HoofdGebouw;
import be.hogent.iii.project.objects.vakken.Gras;
import be.hogent.iii.project.objects.vakken.Rots;
import be.hogent.iii.project.objects.ventjes.Archer;
import be.hogent.iii.project.objects.ventjes.Barbaar;
import be.hogent.iii.project.objects.ventjes.Paard;
import be.hogent.iii.project.objects.ventjes.Zealot;
import java.io.Serializable;

/**
 *
 * @author Caribou
 */
public class DummyVeld implements Serializable {
    

    public DummyVeld() {
      
    }
    
    public Veld getVeld(){
        
        Veld veld;
        
        int grootteX = 30;
        int grootteY = 25;
        veld = new Veld(grootteX,grootteY);
        for (int i = 0; i < grootteX; i++) {
            for (int j = 0; j < grootteY; j++) {
                veld.setVakje(i, j, new Gras());
            }
        }

        for (int i = 0; i < 5; i++) {
            veld.setVakje(grootteX - i - 1, grootteY/2, new Rots());
        }

        for (int i = 0; i < 5; i++) {
            veld.setVakje(i, grootteY/2, new Rots());
        }
        
        
        Coordinaat plaats;
        
        plaats = new Coordinaat(4,3);
        Ventje per = new Zealot();
        per.setPlaats(plaats);
        per.setEigenaarId(1);
        veld.addEntiteit(per);
        
        plaats = new Coordinaat(7,1);
        Gebouw geb = new HoofdGebouw();
        geb.setPlaats(plaats);
        geb.setEigenaarId(1);
        geb.setRallyPoint(new Coordinaat(8,1));
        veld.addEntiteit(geb);
        
        plaats = new Coordinaat(10, 3);
        per = new Barbaar();
        per.setPlaats(plaats);
        per.setEigenaarId(1);
        veld.addEntiteit(per);
        
        plaats = new Coordinaat(4,7);
        per = new Barbaar();
        per.setPlaats(plaats);
        per.setEigenaarId(0);
        veld.addEntiteit(per);
        
        plaats = new Coordinaat(7,9);
        geb = new HoofdGebouw();
        geb.setPlaats(plaats);
        geb.setEigenaarId(0);
        geb.setRallyPoint(new Coordinaat(8,9));
        veld.addEntiteit(geb);
        
        plaats = new Coordinaat(10, 7);
        per = new Zealot();
        per.setPlaats(plaats);
        per.setEigenaarId(0);
        veld.addEntiteit(per);
        
        return veld;
    }
    
    public Veld getVeld2(int aantalSpelers){
        Veld veld;
        int grootteX = 40;
        int grootteY = 40;
        veld = new Veld(grootteX,grootteY);
        for (int i = 0; i < grootteX; i++) {
            for (int j = 0; j < grootteY; j++) {
                veld.setVakje(i, j, new Gras());
            }
        }
        
        maakRotsVierkant(veld, new Coordinaat(7,7), new Coordinaat(12,12));
        maakRotsVierkant(veld, new Coordinaat(28,28), new Coordinaat(33,33));
        maakRotsVierkant(veld, new Coordinaat(7,28), new Coordinaat(12,33));
        maakRotsVierkant(veld, new Coordinaat(28,7), new Coordinaat(33,12));
        
        maakRotsVierkant(veld, new Coordinaat(17,0), new Coordinaat(23,10));
        maakRotsVierkant(veld, new Coordinaat(17,30), new Coordinaat(23,40));
        maakRotsVierkant(veld, new Coordinaat(0,17), new Coordinaat(10,23));
        maakRotsVierkant(veld, new Coordinaat(30,17), new Coordinaat(40,23));
        
        maakRotsVierkant(veld, new Coordinaat(17,17), new Coordinaat(23,23));
        
        maakStartPunt(veld, 0, new Coordinaat(2,2), new Coordinaat(1,1));
        maakStartPunt(veld, 1, new Coordinaat(2,37), new Coordinaat(1,-1));
        
        if (aantalSpelers > 2)
            maakStartPunt(veld, 2, new Coordinaat(37,37), new Coordinaat(-1,-1));
        if (aantalSpelers > 3)
            maakStartPunt(veld, 3, new Coordinaat(37,2), new Coordinaat(-1,1));
        
        return veld;
    }

    public void maakStartPunt(Veld veld, int spelerId, Coordinaat plaats, Coordinaat richting){
        Gebouw geb = new HoofdGebouw();
        geb.setPlaats(new Coordinaat(plaats.getX(), plaats.getY()));
        geb.setEigenaarId(spelerId);
        geb.setRallyPoint(plaats.somMet(richting));
        veld.addEntiteit(geb);
        
        Coordinaat plaatsVentje = plaats.productEnSom(3, richting).somMet(new Coordinaat(-richting.getX(),richting.getY()));
        maakVentjes(veld, new Paard(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        maakVentjes(veld, new Paard(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        
        plaatsVentje = plaats.productEnSom(2, richting);
        maakVentjes(veld, new Barbaar(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        maakVentjes(veld, new Barbaar(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        
        plaatsVentje = plaats.productEnSom(3, richting).somMet(new Coordinaat(richting.getX(),-richting.getY()));
        maakVentjes(veld, new Archer(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        maakVentjes(veld, new Archer(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        
        plaatsVentje = plaats.productEnSom(4, richting);
        maakVentjes(veld, new Barbaar(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        maakVentjes(veld, new Barbaar(), new Coordinaat(plaatsVentje.getX(),plaatsVentje.getY()), spelerId);
        
    }
    
    public void maakVentjes(Veld veld, Ventje vent, Coordinaat plaats, int eigenaar){
        vent.setEigenaarId(eigenaar);
        vent.setPlaats(plaats);
        veld.addEntiteit(vent);
    }
    
    public void maakRotsVierkant(Veld veld, Coordinaat linksOnder, Coordinaat rechtsBoven){
        for (int j=linksOnder.getY();j<rechtsBoven.getY();j++){
            for(int i = linksOnder.getX();i<rechtsBoven.getX();i++){
                veld.setVakje(i, j, new Rots());
            }
        }
    }
}
